int *pia=new int[ivec.size];//应该怎么理解啊?(C++)

来源:百度知道 编辑:UC知道 时间:2024/06/24 01:36:28
如题,明明是数组,为什么是建立指针的?
那这个空间(数组)没名字的?

数组是什么东西?数组就是内存中连续的一段可用内存空间。
数组的定义有时候像下面这样:
int a[100];
意义是,定义一个int型的数组a,它有一百个元素。
本质上,这句代码无非就是在栈中(一块特殊的内存空间)分配长达400字节(设int类型的大小是4字节)的内存,并且使用数组名a来使用这个数组。往后,你就可以类似下面这样使用数据了:
a[10]=10;a[0]=1;
这里要明白的一点是,数组名a,本质上就是一个int类型的指针,用cout<<a;你就可以看到你分配的用来作数组的内存的起始地址。而“a[10]”这样的引用方法呢,就是指,引用内存起始地址往下10×4个字节的地方的4个字节的内存。

下面说int *p=new int[ivec.size];这句代码。new关键字的作用是,在堆中(另一个特殊的内存空间),而不是在栈中,分配一个ivec.size×4字节大小的内存,并把这块内在的首地址赋给指针变量p。前面说到,数组名本质上也就是一个指针,所以,也可以理解成这句代码是在堆中分配有ivec.size个元素的int类型的数组。往后,你同样可以像引用数组那些使用这个内存,如:p[10]=100;

分配空间啊!!
pia指向后面这个数组的首地址!
这个数组就可以这样用了,p[i]=..

谁说是数组了,这是C++中动态分配空间的代码。这代码的意思是:定义一个整形指针pia,并为其动态分配空间,空间大小为ivec.size,且pia指向其首地址。